﻿using KayakMes.Common.Dtos.ProductControlDTO;
using KayakMes.Common.Dtos.ProductControlDTO.Input;
using KayakMes.Common.Dtos.ProductControlDTO.Output;
using KayakMes.Common.Result;
using KayakMes.ProductControl.Domain.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KayakMes.ProductControl.Application.Services
{
    /// <summary>
    /// 产品管理服务接口
    /// 提供产品管理相关业务操作功能，包括增删改查等操作
    /// </summary>
    public interface IProductService
    {
        #region 产品管理—产品
        /// <summary>
        /// 添加产品信息
        /// </summary>
        /// <param name="product"></param>
        /// <returns></returns>
        ApiResult<int> AddProduct(ProductModel product);
        /// <summary>
        /// 获取所有产品信息
        /// </summary>
        /// <param name="input">请求输入参数</param>
        /// <returns>返回受影响行数</returns>
        ApiPaging<ProductModel> GetAllProduct(ProductDto dto);
        /// <summary>
        /// 更新产品信息
        /// </summary>
        /// <param name="product"></param>
        /// <returns></returns>
        ApiResult<int> UpdateProduct(ProductModel product);
        /// <summary>
        /// 通过Id获取产品信息
        /// </summary>
        /// <param name="Id">产品ID</param>
        /// <returns></returns>
        ApiResult<ProductModel> GetProduct(long Id);
        #endregion
        #region 产品管理—盘号
        /// <summary>
        /// 添加盘号信息
        /// </summary>
        /// <param name="reelNumber">盘号模型</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> AddReelNumber(ReelNumberModel reelNumber);
        /// <summary>
        /// 获取所有盘号信息
        /// </summary>
        ApiPaging<ReelNumberModel> GetAllReelNumber(ReelNumberDto dto);
        /// <summary>
        /// 通过Id获取盘号信息
        /// </summary>
        ApiResult<ReelNumberModel> GetReelNumber(long Id);
        /// <summary>
        /// 更新盘号信息
        /// </summary>
        ApiResult<int> UpdateReelNumber(ReelNumberModel reelNumber);
        /// <summary>
        /// 删除盘号信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        ApiResult<int> DelReelNumber(long Id);
        #endregion
        #region 产品管理—颜色
        /// <summary>
        /// 添加颜色信息
        /// </summary>
        /// <param name="colour">颜色模型</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> AddColour(ColourModel colour);
        /// <summary>
        /// 获取所有颜色信息
        /// </summary>
        ApiPaging<ColourModel> GetAllColour(ColourDto dto);
        /// <summary>
        /// 通过Id获取颜色信息
        /// </summary>
        /// <param name="Id">颜色ID</param>
        /// <returns></returns>
       ApiResult <ColourModel> GetColour(long Id);
        /// <summary>
        /// 更新颜色信息
        /// </summary>
        /// <param name="colour">颜色模型</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> UpdateColour(ColourModel colour);
        /// <summary>
        /// 删除颜色信息
        /// </summary>
        /// <param name="Id">颜色实体Id</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> DelColour(long Id);
        #endregion
        #region 产品管理—型号
        /// <summary>
        /// 添加型号信息
        /// </summary>
        /// <param name="product">产品实体</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> AddType(TypeModel type);
        /// <summary>
        /// 获取所有型号信息
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        ApiPaging<TypeModel> GetAllType(TypeDto dto);
        /// <summary>
        /// 获取指定型号信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        ApiResult<TypeModel> GetType(long Id);
        /// <summary>
        /// 删除指定型号信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        ApiResult<int> DelType(long Id);
        /// <summary>
        /// 修改型号信息
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        ApiResult<int> UpdateType(TypeModel type);
        #endregion
        #region 产品管理—规格
        /// <summary>
        /// 添加规格信息
        /// </summary>
        /// <param name="input">规格实体输入参数</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> AddSpecification(AddSpecificationInput input);
        /// <summary>
        /// 获取规格所有信息
        /// </summary>
        /// <param name="input">获取规格信息输入参数</param>
        /// <returns>返回受影响行数</returns>
        ApiPaging<SpecificationOutput> GetAllSpecification(GetSpecificationInput input);
        /// <summary>
        /// 根据指定Id获取规格信息
        /// </summary>
        /// <param name="Id">指定规格Id</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<SpecificationOutput> GetSpecificationCount(long Id);
        /// <summary>
        /// 更新规格信息
        /// </summary>
        /// <param name="specification">规格实体参数</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> UpdateSpecification(SpecificationOutput specification);
        /// <summary>
        /// 删除规格信息
        /// </summary>
        /// <param name="Id">规格信息Id</param>
        /// <returns>返回受影响行数</returns>
        ApiResult<int> DelSpecification(long Id);
        #endregion
        #region 通用逻辑删除操作
        /// <summary>
        /// 通过逻辑删除某个产品
        /// </summary>
        /// <param name="Id">产品ID</param>
        /// <returns></returns>
        ApiResult<int> LoginDel(long Id);
        #endregion
    }
}
